package com.model.工厂.C抽象工厂;

//具体工厂
public class WindowsFactory implements GUIFactory{
    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public TextField createTextField() {
        return new WindowsTextField();
    }

    public static void main(String[] args) {
        // 抽象工厂 一个工厂方法只创建一类具体产品
        GUIFactory factory = new WindowsFactory(); // 切换为WindowsFactory即可换风格
        Button button = factory.createButton();
        button.render();      // 输出：win风格按钮
    }
}
// 简单工厂 通过一个工厂类创建生产所有产品
// 工厂方法 通过具体的产品工厂创建产品，产品有属于自己的工厂，不同工厂生产不同产品
// 抽象工厂 通过产品属性的抽象，实现产品自己的工厂，实现生产属性指定的不同种类产品

//模式	      解决的问题	           灵活性	       典型应用场景
//简单工厂	统一创建单一产品	  低（需修改工厂类）	对象创建逻辑简单且稳定
//工厂方法	单一产品的多态创建	  高（通过子类扩展）	需要动态扩展产品类型
//抽象工厂	创建一组关联产品     （产品族）	       最高（家族维度扩展）跨平台UI、数据库兼容层等